package com.yunxi.controller.dealer;

import com.yunxi.common.config.RedisCacheService;
import com.yunxi.core.web.ApiResult;
import com.yunxi.core.web.CurrentUser;
import com.yunxi.core.web.LoginInfo;
import com.yunxi.core.web.ResponseUtil;
import com.yunxi.dealer.pojo.PartnerAreaVO;
import com.yunxi.dealer.pojo.PartnerStatusVO;
import com.yunxi.dealer.pojo.PartnerVO;
import com.yunxi.dealer.service.PartnerDubboService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 渠道商信息 前端控制器
 * </p>
 *
 * @author
 * @since 2019-05-13
 */
@RestController
@RequestMapping("/admin/partner")
@Api(tags = "partner:partner", description = "渠道商信息接口")
public class PartnerController {
   private static final Logger logger = LoggerFactory.getLogger(PartnerController.class);

   @Autowired
   PartnerDubboService partnerDubboService;

   @Autowired
   RedisCacheService rcs;

   @GetMapping("/page")
   @ApiOperation(value = "查询分页")
   public ApiResult page(PartnerVO partnerVO, Integer pageNum, Integer pageSize) throws Exception {
      return ResponseUtil.ok(partnerDubboService.findPageByVO(partnerVO, pageNum, pageSize));
   }

   @GetMapping("/list")
   @ApiOperation(value = "查询列表")
   public ApiResult list(PartnerVO v) throws Exception {
      return ResponseUtil.ok(partnerDubboService.listByVo(v));
   }

   @GetMapping("/listSel")
   @ApiOperation(value = "查询列表")
   public ApiResult listSel(PartnerVO v) throws Exception {
      return ResponseUtil.ok(partnerDubboService.listSel(v));
   }

   @GetMapping("/pageSel")
   @ApiOperation(value = "查询列表")
   public ApiResult pageSel(PartnerVO v, Integer pageNum, Integer pageSize) throws Exception {
      return ResponseUtil.ok(partnerDubboService.pageSel(v,pageNum,pageSize));
   }

   @GetMapping("/groupCount")
   @ApiOperation(value = "查询分组数量")
   public ApiResult page2(PartnerVO partnerVO, Integer pageNum, Integer pageSize) throws Exception {
      return ResponseUtil.ok(partnerDubboService.findPageByVO2(partnerVO, pageNum, pageSize));
   }

   @GetMapping("/load")
   @ApiOperation(value = "读取单个")
   public ApiResult load(PartnerVO partnerVO) throws Exception {
      PartnerVO p = partnerDubboService.getCasById(partnerVO.getPartnerId());
      //p.setProductAuthCodeJson(JSONObject.parseArray(p.getProductAuthCode()));
      return ResponseUtil.ok(p);
   }

   @GetMapping("/listByAreaCode")
   @ApiOperation(value = "根据省份代码查询对应的渠道商")
   public ApiResult listByAreaCode(PartnerVO partnerVO, Integer pageNum, Integer pageSize) throws Exception {
      return partnerDubboService.listByAreaCode(partnerVO,pageNum,pageSize);
   }

   @PostMapping("/listByAreaCodes")
   @ApiOperation(value = "根据区域代码查询对应的渠道商")
   public ApiResult listByAreaCodes(@RequestBody List<PartnerVO> partnerVOList) throws Exception {
      return ResponseUtil.ok(partnerDubboService.listByAreaCodes(partnerVOList)) ;
   }

   @PostMapping("/save")
   @ApiOperation(value = "保存信息")
   public ApiResult save(@RequestBody PartnerVO partnerVO, @CurrentUser LoginInfo loginInfo) throws Exception {
      /*1.业务部门线下通过OA系统进行渠道商入网审批流程，审批通过后，将渠道商信息手动维护在PMS系统中，
        由PMS系统创建渠道信息，同一个渠道商可以维护多个收获地址
        2.渠道商信息创建时，可以同步关联创建二网信息，创建二网信息渠道商权限会多二网信息员权限，
        渠道维护二网信息员可以通过系统下定批售订单，二网提交批售订单会以主店形式进行提交；

        3.渠道信息创建完成后由财务部门在PMS系统中进行审批，审批通过后将信息传递给SAP系统；
        4.SAP完成渠道信息创建后，在PMS系统中维护 SAP店代码；
        5.渠道商信息维护完成后系统自动生成管理员权限账号，供渠道商登录使用；
        6.渠道商创建完成后，总部可以对渠道商账户进行冻结和退网操作；*/

      /*
       * 二网信息
       * 自动生成管理员权限账号
       * 发票
       * 仓库
       *
       *
       * 1.点击提交之后，需要将渠道创建信息同步至ESB平台，由ESB平台进行分发；
         2.渠道信息创建完成后同步创建渠道用户管理员账号，管理员账号默认为店代码：密码默认为aiways，首次登陆需要修改密码；
         3.渠道商创建编码不能超过10位
         4.渠道商信息冻结状态时不允许新增销售订单和人员信息；
         5.渠道商退网状态后，不能对信息做任何操作；
       * */

      return partnerDubboService.saveOrUpdate(partnerVO, loginInfo);
   }

   @PostMapping("/del")
   @ApiOperation(value = "删除")
   public ApiResult del(@RequestBody PartnerVO partnerVO, @CurrentUser LoginInfo loginInfo) throws Exception {
      partnerDubboService.removeById(partnerVO.getPartnerId());
      return ResponseUtil.ok("success");
   }

   @GetMapping("/loadDetail")
   @ApiOperation(value = "读取渠道商详细信息")
   public ApiResult loadDetail(@RequestParam String partnerCode, @RequestParam String tenantId) {

      PartnerVO p = partnerDubboService.load(partnerCode,tenantId);
      //p.setProductAuthCodeJson(JSONObject.parseArray(p.getProductAuthCode()));
      return ResponseUtil.ok(p);
   }

   @PostMapping("/updateBatch")
   @ApiOperation(value = "批量更新渠道状态")
   public ApiResult updateBatch(@RequestBody List<PartnerStatusVO> ids, @CurrentUser LoginInfo loginInfo) throws Exception {
      return partnerDubboService.updateBatch(ids, loginInfo);
   }

   @PostMapping("/updateBatchArea")
   @ApiOperation(value = "批量更新渠道归属地区/管辖范围")
   public ApiResult updateBatchArea(@RequestBody List<PartnerAreaVO> partnerAreaVOList, @CurrentUser LoginInfo loginInfo) throws Exception {
      return partnerDubboService.updateBatchArea(partnerAreaVOList, loginInfo);
   }

   @GetMapping("/updateTransStatus")
   @ApiOperation(value = "修改对接状态")
   public ApiResult updateBatchArea(@RequestParam String isOpen) throws Exception {
      rcs.set("pms_partner_center_switch",isOpen);
      return ResponseUtil.ok();
   }

   @GetMapping("/exportPartner")
   @ApiOperation(value = "导出渠道信息详情数据")
   public ApiResult exportPartner(PartnerVO partnerVO, @CurrentUser LoginInfo loginInfo) throws Exception {
      return partnerDubboService.exportPartner(partnerVO);
   }
/*@PostMapping("/export")
@ApiOperation(value = "导出excel")
public Object export(@RequestParam Map<String,Object> params) throws Exception {
return ResponseUtil.ok(partnerDubboService.findMapByList(params));
}*/
}
